<?php

namespace JsonLowCode\UI;

use JsonLowCode\Schema;
use JsonLowCode\Traits\Events\HasOnFinish;
use JsonLowCode\Traits\Props\HasActive;
use JsonLowCode\Traits\Props\HasAffix;
use JsonLowCode\Traits\Props\HasColor;
use JsonLowCode\Traits\Props\HasDuration;
use JsonLowCode\Traits\Props\HasLocale;
use JsonLowCode\Traits\Props\HasMax;
use JsonLowCode\Traits\Props\HasShow;
use JsonLowCode\Traits\Props\HasType;
use JsonLowCode\Traits\Props\HasValue;

/**
 * NumberAnimation 数字动画
 * ref-methods:  play() 播放动画
 * @method static NumberAnimation make(int $from = 0,int $to = null) NumberAnimation组件
 */
class NumberAnimation extends Schema
{
    protected string $componentName = "NNumberAnimation";

    use HasLocale, HasDuration, HasActive;

    use HasOnFinish;

    /**
     * @param int $from
     * @param int|null $to
     */
    public function __construct(int $from = 0,int $to = null)
    {
        parent::__construct();
        $this->from($from);
        $to!==null&&$this->to($to);
    }


    /**
     * 精度，保留小数点后几位
     * @param int|string $precision
     * @return $this
     */
    public function precision(string|int $precision = 0): static
    {
        return $this->prop('precision', $precision);
    }


    /**
     * 数值动画起始值
     * @param string|int $value
     * @return $this
     */
    public function from(string|int $value = 0): static
    {
        return $this->prop('from', $value);
    }

    /**
     * 数值动画目标值
     * @param string|int|null $value
     * @return $this
     */
    public function to(string|int $value = null): static
    {
        return $this->prop('to', $value);
    }

    /**
     * 是否显示分隔符
     * @param string|bool $bool
     * @return $this
     */
    public function showSeparator(string|bool $bool = true): static
    {
        return $this->prop('showSeparator', $bool);
    }
}
